home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / accum.s < prev    next >
Text File  |  1999-02-04  |  19KB  |  1,085 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/accum.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_read_rgba_span
  7.     XREF    _gl_mask_rgba_span
  8.     XREF    _gl_update_state
  9.     XREF    _gl_error
  10.     XREF    _gl_warning
  11.     XREF    _q_memset
  12.     XREF    _malloc
  13.     XREF    _free
  14.     XREF    _CC
  15.  
  16.     SECTION "_gl_alloc_accum_buffer:0",CODE
  17.  
  18.  
  19. ;void gl_alloc_accum_buffer( GLcontext *ctx )
  20.     XDEF    _gl_alloc_accum_buffer
  21. _gl_alloc_accum_buffer
  22.     move.l    a2,-(a7)
  23.     move.l    $8(a7),a2
  24. L72
  25. ;   if (ctx->Buffer->Accum) 
  26.     move.l    $8FC(a2),a0
  27.     tst.l    $14(a0)
  28.     beq.b    L74
  29. L73
  30. ;      free( ctx->Buffer->Accum );
  31.     move.l    $8FC(a2),a0
  32.     move.l    $14(a0),-(a7)
  33.     jsr    _free
  34.     addq.w    #4,a7
  35. ;      ctx->Buffer->Accum = NULL;
  36.     move.l    $8FC(a2),a0
  37.     clr.l    $14(a0)
  38. L74
  39. ;   n = ctx->Buffer->Width * ctx->Buffer->Height * 4 * sizeof(GLac
  40.     move.l    $8FC(a2),a0
  41.     move.l    4(a0),d0
  42.     move.l    $8FC(a2),a0
  43.     muls.l    $8(a0),d0
  44.     moveq    #2,d1
  45.     asl.l    d1,d0
  46.     moveq    #1,d1
  47.     asl.l    d1,d0
  48. ;   ctx->Buffer->Accum = (GLaccum *) malloc( n );
  49.     move.l    d0,-(a7)
  50.     jsr    _malloc
  51.     addq.w    #4,a7
  52.     move.l    $8FC(a2),a0
  53.     move.l    d0,$14(a0)
  54. ;   if (!ctx->Buffer->Accum) 
  55.     move.l    $8FC(a2),a0
  56.     tst.l    $14(a0)
  57.     bne.b    L76
  58. L75
  59. ;      gl_error( ctx, GL_OUT_OF_MEMORY, "glAccum" );
  60.     move.l    #L71,-(a7)
  61.     pea    $505.w
  62.     move.l    a2,-(a7)
  63.     jsr    _gl_error
  64.     add.w    #$C,a7
  65. L76
  66.     move.l    (a7)+,a2
  67.     rts
  68.  
  69. L71
  70.     dc.b    'glAccum',0
  71.  
  72.     SECTION "_gl_ClearAccum:0",CODE
  73.  
  74.     rts
  75.  
  76. ;void gl_ClearAccum( GLcontext *ctx,
  77.     XDEF    _gl_ClearAccum
  78. _gl_ClearAccum
  79.     fmovem.x fp2/fp3/fp4,-(a7)
  80.     move.l    $28(a7),a0
  81.     fmove.s    $2C(a7),fp0
  82.     fmove.s    $38(a7),fp1
  83.     fmove.s    $34(a7),fp2
  84.     fmove.s    $30(a7),fp3
  85. L78
  86. ;   if (INSIDE_BEGIN_END(ctx)) 
  87.     move.l    a0,a1
  88.     add.l    #$E968,a1
  89.     move.l    (a1),d0
  90.     cmp.l    #$1A00,d0
  91.     beq.b    L80
  92. L79
  93. ;      gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
  94.     move.l    #L77,-(a7)
  95.     pea    $502.w
  96.     move.l    a0,-(a7)
  97.     jsr    _gl_error
  98.     add.w    #$C,a7
  99.     fmovem.x (a7)+,fp2/fp3/fp4
  100.     rts
  101. L80
  102. ;   ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
  103.     fmove.x    fp0,fp4
  104.     fcmp.d    #$.BFF00000.00000000,fp4
  105.     fboge.b    L82
  106. L81
  107.     fmove.d    #$.BFF00000.00000000,fp0
  108.     bra.b    L86
  109. L82
  110.     fmove.x    fp0,fp4
  111.     fcmp.d    #$.3FF00000.00000000,fp4
  112.     fbole.b    L84
  113. L83
  114.     fmove.d    #$.3FF00000.00000000,fp0
  115. L84
  116. L85
  117. L86
  118.     fmove.s    fp0,$21B4(a0)
  119. ;   ctx->Accum.ClearColor[1] = CLAMP( green, -1.0, 1.0 );
  120.     fmove.x    fp3,fp0
  121.     fcmp.d    #$.BFF00000.00000000,fp0
  122.     fboge.b    L88
  123. L87
  124.     fmove.d    #$.BFF00000.00000000,fp0
  125.     bra.b    L92
  126. L88
  127.     fmove.x    fp3,fp0
  128.     fcmp.d    #$.3FF00000.00000000,fp0
  129.     fbole.b    L90
  130. L89
  131.     fmove.d    #$.3FF00000.00000000,fp0
  132.     bra.b    L91
  133. L90
  134.     fmove.x    fp3,fp0
  135. L91
  136. L92
  137.     lea    $21B4(a0),a1
  138.     fmove.s    fp0,4(a1)
  139. ;   ctx->Accum.ClearColor[2] = CLAMP( blue, -1.0, 1.0 );
  140.     fmove.x    fp2,fp0
  141.     fcmp.d    #$.BFF00000.00000000,fp0
  142.     fboge.b    L94
  143. L93
  144.     fmove.d    #$.BFF00000.00000000,fp0
  145.     bra.b    L98
  146. L94
  147.     fmove.x    fp2,fp0
  148.     fcmp.d    #$.3FF00000.00000000,fp0
  149.     fbole.b    L96
  150. L95
  151.     fmove.d    #$.3FF00000.00000000,fp0
  152.     bra.b    L97
  153. L96
  154.     fmove.x    fp2,fp0
  155. L97
  156. L98
  157.     lea    $21B4(a0),a1
  158.     fmove.s    fp0,$8(a1)
  159. ;   ctx->Accum.ClearColor[3] = CLAMP( alpha, -1.0, 1.0 );
  160.     fmove.x    fp1,fp0
  161.     fcmp.d    #$.BFF00000.00000000,fp0
  162.     fboge.b    L100
  163. L99
  164.     fmove.d    #$.BFF00000.00000000,fp0
  165.     bra.b    L104
  166. L100
  167.     fmove.x    fp1,fp0
  168.     fcmp.d    #$.3FF00000.00000000,fp0
  169.     fbole.b    L102
  170. L101
  171.     fmove.d    #$.3FF00000.00000000,fp0
  172.     bra.b    L103
  173. L102
  174.     fmove.x    fp1,fp0
  175. L103
  176. L104
  177.     lea    $21B4(a0),a0
  178.     fmove.s    fp0,$C(a0)
  179.     fmovem.x (a7)+,fp2/fp3/fp4
  180.     rts
  181.  
  182. L77
  183.     dc.b    'glAccum',0
  184.  
  185.     SECTION "_gl_Accum:0",CODE
  186.  
  187.  
  188. ;void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
  189.     XDEF    _gl_Accum
  190. _gl_Accum
  191. L181    EQU    -$3278
  192.     link    a5,#L181
  193.     movem.l    d2-d7/a2,-(a7)
  194.     fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
  195.     move.l    $C(a5),d3
  196.     move.l    $8(a5),a2
  197.     fmove.s    $10(a5),fp2
  198. L107
  199. ;   if (INSIDE_BEGIN_END(ctx)) 
  200.     move.l    a2,a0
  201.     add.l    #$E968,a0
  202.     move.l    (a0),d0
  203.     cmp.l    #$1A00,d0
  204.     beq.b    L109
  205. L108
  206. ;      gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
  207.     move.l    #L105,-(a7)
  208.     pea    $502.w
  209.     move.l    a2,-(a7)
  210.     jsr    _gl_error
  211.     add.w    #$C,a7
  212.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
  213.     movem.l    (a7)+,d2-d7/a2
  214.     unlk    a5
  215.     rts
  216. L109
  217. ;   if (ctx->Visual->AccumBits==0 || !ctx->Buffer->Accum) 
  218.     move.l    $8F8(a2),a0
  219.     tst.l    $18(a0)
  220.     beq.b    L111
  221. L110
  222.     move.l    $8FC(a2),a0
  223.     tst.l    $14(a0)
  224.     bne.b    L112
  225. L111
  226. ;      gl_warning(ctx, "Calling glAccum() without an accumulati
  227.     move.l    #L106,-(a7)
  228.     move.l    a2,-(a7)
  229.     jsr    _gl_warning
  230.     addq.w    #$8,a7
  231.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
  232.     movem.l    (a7)+,d2-d7/a2
  233.     unlk    a5
  234.     rts
  235. L112
  236. ;   if (sizeof(GLaccum)==1) 
  237. ;   else if (sizeof(GLaccum)==2) 
  238. ;      acc_scale = 32767.0;
  239.     fmove.s    #$.46FFFE00,fp6
  240. ;   if (ctx->NewState)
  241.     move.l    a2,a0
  242.     add.l    #$E960,a0
  243.     tst.l    (a0)
  244.     beq.b    L114
  245. L113
  246. ;      gl_update_state( ctx );
  247.     move.l    a2,-(a7)
  248.     jsr    _gl_update_state
  249.     addq.w    #4,a7
  250. L114
  251. ;   if (ctx->Scissor.Enabled) 
  252.     move.l    a2,a0
  253.     add.l    #$DE92,a0
  254.     tst.b    (a0)
  255.     beq.b    L116
  256. L115
  257. ;      xpos = ctx->Scissor.X;
  258.     move.l    a2,a0
  259.     add.l    #$DE92,a0
  260.     move.l    2(a0),d7
  261. ;      ypos = ctx->Scissor.Y;
  262.     move.l    a2,a0
  263.     add.l    #$DE92,a0
  264.     move.l    6(a0),d6
  265. ;      width = ctx->Scissor.Width;
  266.     move.l    a2,a0
  267.     add.l    #$DE92,a0
  268.     move.l    $A(a0),d2
  269. ;      height = ctx->Scissor.Height;
  270.     move.l    a2,a0
  271.     add.l    #$DE92,a0
  272.     move.l    $E(a0),-$10(a5)
  273.     bra.b    L117
  274. L116
  275. ;      xpos = 0;
  276.     moveq    #0,d7
  277. ;      ypos = 0;
  278.     moveq    #0,d6
  279. ;      width = ctx->Buffer->Width;
  280.     move.l    $8FC(a2),a0
  281.     move.l    4(a0),d2
  282. ;      height = ctx->Buffer->Height;
  283.     move.l    $8FC(a2),a0
  284.     move.l    $8(a0),-$10(a5)
  285. L117
  286. ;   switch (op)
  287.     cmp.l    #$102,d3
  288.     beq    L146
  289.     bgt.b    L182
  290.     cmp.l    #$100,d3
  291.     beq    L132
  292.     cmp.l    #$101,d3
  293.     beq    L139
  294.     bra    L179
  295. L182
  296.     cmp.l    #$103,d3
  297.     beq.b    L125
  298.     cmp.l    #$104,d3
  299.     beq.b    L118
  300.     bra    L179
  301. ;      
  302. L118
  303. ;        ival = (GLaccum) (value * acc_scale);
  304.     fmul.x    fp6,fp2
  305.     fmove.l    fp2,d0
  306. ;        for (j=0;
  307.     moveq    #0,d4
  308.     bra.b    L123
  309. L119
  310. ;           acc = ctx->Buffer->Accum
  311.     move.l    $8FC(a2),a0
  312.     move.l    $14(a0),a1
  313.     move.l    $8FC(a2),a0
  314.     move.l    4(a0),d1
  315.     mulu.l    d6,d1
  316.     add.l    d7,d1
  317.     moveq    #2,d3
  318.     asl.l    d3,d1
  319.     lea    0(a1,d1.l*2),a0
  320. ;           for (i=0;
  321.     moveq    #0,d3
  322.     bra.b    L121
  323. L120
  324. ;          *acc += ival;
  325.     add.w    d0,(a0)
  326. ;   acc++;
  327.     addq.w    #2,a0
  328. ;          *acc += ival;
  329.     add.w    d0,(a0)
  330. ;   acc++;
  331.     addq.w    #2,a0
  332. ;          *acc += ival;
  333.     add.w    d0,(a0)
  334. ;   acc++;
  335.     addq.w    #2,a0
  336. ;          *acc += ival;
  337.     add.w    d0,(a0)
  338. ;   acc++;
  339.     addq.w    #2,a0
  340.     addq.l    #1,d3
  341. L121
  342.     cmp.l    d2,d3
  343.     blo.b    L120
  344. L122
  345. ;           ypos++;
  346.     move.l    d6,d1
  347.     addq.l    #1,d1
  348.     move.l    d1,d6
  349.     addq.l    #1,d4
  350. L123
  351.     cmp.l    -$10(a5),d4
  352.     blo.b    L119
  353. L124
  354. ;     
  355.     bra    L180
  356. L125
  357. ;        for (j=0;
  358.     moveq    #0,d3
  359.     bra    L130
  360. L126
  361. ;           acc = ctx->Buffer->Accum
  362.     move.l    $8FC(a2),a0
  363.     move.l    $14(a0),a1
  364.     move.l    $8FC(a2),a0
  365.     move.l    4(a0),d0
  366.     mulu.l    d6,d0
  367.     add.l    d7,d0
  368.     moveq    #2,d1
  369.     asl.l    d1,d0
  370.     lea    0(a1,d0.l*2),a0
  371. ;           for (i=0;
  372.     moveq    #0,d0
  373.     bra.b    L128
  374. L127
  375. ;          *acc = (GLaccum) ( (GLfloat) *acc * value );
  376.     move.w    (a0),d1
  377.     ext.l    d1
  378.     fmove.l    d1,fp0
  379.     fmul.x    fp2,fp0
  380.     fmove.l    fp0,d1
  381.     move.w    d1,(a0)
  382. ;    acc++;
  383.     addq.w    #2,a0
  384. ;          *acc = (GLaccum) ( (GLfloat) *acc * value );
  385.     move.w    (a0),d1
  386.     ext.l    d1
  387.     fmove.l    d1,fp0
  388.     fmul.x    fp2,fp0
  389.     fmove.l    fp0,d1
  390.     move.w    d1,(a0)
  391. ;    acc++;
  392.     addq.w    #2,a0
  393. ;          *acc = (GLaccum) ( (GLfloat) *acc * value );
  394.     move.w    (a0),d1
  395.     ext.l    d1
  396.     fmove.l    d1,fp0
  397.     fmul.x    fp2,fp0
  398.     fmove.l    fp0,d1
  399.     move.w    d1,(a0)
  400. ;    acc++;
  401.     addq.w    #2,a0
  402. ;          *acc = (GLaccum) ( (GLfloat) *acc * value );
  403.     move.w    (a0),d1
  404.     ext.l    d1
  405.     fmove.l    d1,fp0
  406.     fmul.x    fp2,fp0
  407.     fmove.l    fp0,d1
  408.     move.w    d1,(a0)
  409. ;    acc++;
  410.     addq.w    #2,a0
  411.     addq.l    #1,d0
  412. L128
  413.     cmp.l    d2,d0
  414.     blo.b    L127
  415. L129
  416. ;           ypos++;
  417.     move.l    d6,d0
  418.     addq.l    #1,d0
  419.     move.l    d0,d6
  420.     addq.l    #1,d3
  421. L130
  422.     cmp.l    -$10(a5),d3
  423.     blo    L126
  424. L131
  425. ;     
  426.     bra    L180
  427. L132
  428. ;        (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
  429.     move.l    a2,a0
  430.     add.l    #$B168,a0
  431.     move.l    (a0),-(a7)
  432.     move.l    a2,-(a7)
  433.     move.l    $91C(a2),a0
  434.     jsr    (a0)
  435.     addq.w    #$8,a7
  436. ;        rscale = value * acc_scale / 255.0;
  437.     fmove.x    fp2,fp0
  438.     fmul.x    fp6,fp0
  439.     fdiv.d    #$.406FE000.00000000,fp0
  440.     fmove.x    fp0,fp5
  441. ;        gscale = value * acc_scale / 255.0;
  442.     fmove.x    fp2,fp0
  443.     fmul.x    fp6,fp0
  444.     fdiv.d    #$.406FE000.00000000,fp0
  445.     fmove.x    fp0,fp4
  446. ;        bscale = value * acc_scale / 255.0;
  447.     fmove.x    fp2,fp0
  448.     fmul.x    fp6,fp0
  449.     fdiv.d    #$.406FE000.00000000,fp0
  450.     fmove.x    fp0,fp3
  451. ;        ascale = value * acc_scale / 255.0;
  452.     fmul.x    fp6,fp2
  453.     fmove.x    fp2,fp0
  454.     fdiv.d    #$.406FE000.00000000,fp0
  455.     fmove.x    fp0,fp2
  456. ;        for (j=0;
  457.     moveq    #0,d4
  458.     bra    L137
  459. L133
  460. ;           gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
  461.     pea    -$1926(a5)
  462.     move.l    d6,-(a7)
  463.     move.l    d7,-(a7)
  464.     move.l    d2,-(a7)
  465.     move.l    a2,-(a7)
  466.     jsr    _gl_read_rgba_span
  467.     add.w    #$14,a7
  468. ;           acc = ctx->Buffer->Accum
  469.     move.l    $8FC(a2),a0
  470.     move.l    $14(a0),a1
  471.     move.l    $8FC(a2),a0
  472.     move.l    4(a0),d0
  473.     mulu.l    d6,d0
  474.     add.l    d7,d0
  475.     moveq    #2,d1
  476.     asl.l    d1,d0
  477.     lea    0(a1,d0.l*2),a0
  478. ;           for (i=0;
  479.     moveq    #0,d0
  480.     bra    L135
  481. L134
  482. ;          *acc += (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
  483.     lea    -$1926(a5),a1
  484.     moveq    #0,d1
  485.     move.b    0(a1,d0.l*4),d1
  486.     fmove.l    d1,fp0
  487.     fmul.x    fp5,fp0
  488.     fmove.l    fp0,d1
  489.     move.w    d1,d3
  490.     add.w    d3,(a0)
  491. ;  acc++;
  492.     addq.w    #2,a0
  493. ;          *acc += (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
  494.     lea    -$1926(a5),a1
  495.     lea    0(a1,d0.l*4),a1
  496.     moveq    #0,d1
  497.     move.b    1(a1),d1
  498.     fmove.l    d1,fp0
  499.     fmul.x    fp4,fp0
  500.     fmove.l    fp0,d1
  501.     move.w    d1,d3
  502.     add.w    d3,(a0)
  503. ;  acc++;
  504.     addq.w    #2,a0
  505. ;          *acc += (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
  506.     lea    -$1926(a5),a1
  507.     lea    0(a1,d0.l*4),a1
  508.     moveq    #0,d1
  509.     move.b    2(a1),d1
  510.     fmove.l    d1,fp0
  511.     fmul.x    fp3,fp0
  512.     fmove.l    fp0,d1
  513.     move.w    d1,d3
  514.     add.w    d3,(a0)
  515. ;  acc++;
  516.     addq.w    #2,a0
  517. ;          *acc += (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
  518.     lea    -$1926(a5),a1
  519.     lea    0(a1,d0.l*4),a1
  520.     moveq    #0,d1
  521.     move.b    3(a1),d1
  522.     fmove.l    d1,fp0
  523.     fmul.x    fp2,fp0
  524.     fmove.l    fp0,d1
  525.     move.w    d1,d3
  526.     add.w    d3,(a0)
  527. ;  acc++;
  528.     addq.w    #2,a0
  529.     addq.l    #1,d0
  530. L135
  531.     cmp.l    d2,d0
  532.     blo    L134
  533. L136
  534. ;           ypos++;
  535.     move.l    d6,d0
  536.     addq.l    #1,d0
  537.     move.l    d0,d6
  538.     addq.l    #1,d4
  539. L137
  540.     cmp.l    -$10(a5),d4
  541.     blo    L133
  542. L138
  543. ;        (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
  544.     move.l    $21E2(a2),-(a7)
  545.     move.l    a2,-(a7)
  546.     move.l    $91C(a2),a0
  547.     jsr    (a0)
  548.     addq.w    #$8,a7
  549. ;     
  550.     bra    L180
  551. L139
  552. ;        (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
  553.     move.l    a2,a0
  554.     add.l    #$B168,a0
  555.     move.l    (a0),-(a7)
  556.     move.l    a2,-(a7)
  557.     move.l    $91C(a2),a0
  558.     jsr    (a0)
  559.     addq.w    #$8,a7
  560. ;        rscale = value * acc_scale / 255.0;
  561.     fmove.x    fp2,fp0
  562.     fmul.x    fp6,fp0
  563.     fdiv.d    #$.406FE000.00000000,fp0
  564.     fmove.x    fp0,fp5
  565. ;        gscale = value * acc_scale / 255.0;
  566.     fmove.x    fp2,fp0
  567.     fmul.x    fp6,fp0
  568.     fdiv.d    #$.406FE000.00000000,fp0
  569.     fmove.x    fp0,fp4
  570. ;        bscale = value * acc_scale / 255.0;
  571.     fmove.x    fp2,fp0
  572.     fmul.x    fp6,fp0
  573.     fdiv.d    #$.406FE000.00000000,fp0
  574.     fmove.x    fp0,fp3
  575. ;        ascale = value * acc_scale / 255.0;
  576.     fmul.x    fp6,fp2
  577.     fmove.x    fp2,fp0
  578.     fdiv.d    #$.406FE000.00000000,fp0
  579.     fmove.x    fp0,fp2
  580. ;        for (j=0;
  581.     moveq    #0,d3
  582.     bra    L144
  583. L140
  584. ;           gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
  585.     pea    -$1926(a5)
  586.     move.l    d6,-(a7)
  587.     move.l    d7,-(a7)
  588.     move.l    d2,-(a7)
  589.     move.l    a2,-(a7)
  590.     jsr    _gl_read_rgba_span
  591.     add.w    #$14,a7
  592. ;           acc = ctx->Buffer->Accum
  593.     move.l    $8FC(a2),a0
  594.     move.l    $14(a0),a1
  595.     move.l    $8FC(a2),a0
  596.     move.l    4(a0),d0
  597.     mulu.l    d6,d0
  598.     add.l    d7,d0
  599.     moveq    #2,d1
  600.     asl.l    d1,d0
  601.     lea    0(a1,d0.l*2),a0
  602. ;           for (i=0;
  603.     moveq    #0,d0
  604.     bra.b    L142
  605. L141
  606. ;          *acc++ = (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
  607.     lea    -$1926(a5),a1
  608.     moveq    #0,d1
  609.     move.b    0(a1,d0.l*4),d1
  610.     fmove.l    d1,fp0
  611.     fmul.x    fp5,fp0
  612.     fmove.l    fp0,d1
  613.     move.w    d1,(a0)+
  614. ;          *acc++ = (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
  615.     lea    -$1926(a5),a1
  616.     lea    0(a1,d0.l*4),a1
  617.     moveq    #0,d1
  618.     move.b    1(a1),d1
  619.     fmove.l    d1,fp0
  620.     fmul.x    fp4,fp0
  621.     fmove.l    fp0,d1
  622.     move.w    d1,(a0)+
  623. ;          *acc++ = (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
  624.     lea    -$1926(a5),a1
  625.     lea    0(a1,d0.l*4),a1
  626.     moveq    #0,d1
  627.     move.b    2(a1),d1
  628.     fmove.l    d1,fp0
  629.     fmul.x    fp3,fp0
  630.     fmove.l    fp0,d1
  631.     move.w    d1,(a0)+
  632. ;          *acc++ = (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
  633.     lea    -$1926(a5),a1
  634.     lea    0(a1,d0.l*4),a1
  635.     moveq    #0,d1
  636.     move.b    3(a1),d1
  637.     fmove.l    d1,fp0
  638.     fmul.x    fp2,fp0
  639.     fmove.l    fp0,d1
  640.     move.w    d1,(a0)+
  641.     addq.l    #1,d0
  642. L142
  643.     cmp.l    d2,d0
  644.     blo.b    L141
  645. L143
  646. ;           ypos++;
  647.     move.l    d6,d0
  648.     addq.l    #1,d0
  649.     move.l    d0,d6
  650.     addq.l    #1,d3
  651. L144
  652.     cmp.l    -$10(a5),d3
  653.     blo    L140
  654. L145
  655. ;        (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
  656.     move.l    $21E2(a2),-(a7)
  657.     move.l    a2,-(a7)
  658.     move.l    $91C(a2),a0
  659.     jsr    (a0)
  660.     addq.w    #$8,a7
  661. ;     
  662.     bra    L180
  663. L146
  664. ;        rscale = value / acc_scale * 255.0F;
  665.     fmove.x    fp2,fp5
  666.     fdiv.x    fp6,fp5
  667.     fmul.s    #$.437F0000,fp5
  668. ;        gscale = value / acc_scale * 255.0F;
  669.     fmove.x    fp2,fp4
  670.     fdiv.x    fp6,fp4
  671.     fmul.s    #$.437F0000,fp4
  672. ;        bscale = value / acc_scale * 255.0F;
  673.     fmove.x    fp2,fp3
  674.     fdiv.x    fp6,fp3
  675.     fmul.s    #$.437F0000,fp3
  676. ;        ascale = value / acc_scale * 255.0F;
  677.     fdiv.x    fp6,fp2
  678.     fmul.s    #$.437F0000,fp2
  679. ;        for (j=0;
  680.     clr.l    -$325A(a5)
  681.     bra    L177
  682. L147
  683. ;           acc = ctx->Buffer->Accum
  684.     move.l    $8FC(a2),a0
  685.     move.l    $14(a0),a1
  686.     move.l    $8FC(a2),a0
  687.     move.l    4(a0),d0
  688.     mulu.l    d6,d0
  689.     add.l    d7,d0
  690.     moveq    #2,d1
  691.     asl.l    d1,d0
  692.     lea    0(a1,d0.l*2),a0
  693. ;           for (i=0;
  694.     moveq    #0,d0
  695.     bra    L173
  696. L148
  697. ;          r = (GLint) ( (GLfloat) (*acc++) * rscale + 0.5F );
  698.     move.w    (a0)+,d1
  699.     ext.l    d1
  700.     fmove.l    d1,fp0
  701.     fmul.x    fp5,fp0
  702.     fadd.s    #$.3F000000,fp0
  703.     fmove.l    fp0,d5
  704. ;          g = (GLint) ( (GLfloat) (*acc++) * gscale + 0.5F );
  705.     move.w    (a0)+,d1
  706.     ext.l    d1
  707.     fmove.l    d1,fp0
  708.     fmul.x    fp4,fp0
  709.     fadd.s    #$.3F000000,fp0
  710.     fmove.l    fp0,d4
  711. ;          b = (GLint) ( (GLfloat) (*acc++) * bscale + 0.5F );
  712.     move.w    (a0)+,d1
  713.     ext.l    d1
  714.     fmove.l    d1,fp0
  715.     fmul.x    fp3,fp0
  716.     fadd.s    #$.3F000000,fp0
  717.     fmove.l    fp0,d3
  718. ;          a = (GLint) ( (GLfloat) (*acc++) * ascale + 0.5F );
  719.     move.w    (a0)+,d1
  720.     ext.l    d1
  721.     fmove.l    d1,fp0
  722.     fmul.x    fp2,fp0
  723.     fadd.s    #$.3F000000,fp0
  724.     fmove.l    fp0,d1
  725. ;          rgba[i][RCOMP] = CLAMP( r, 0, 255 );
  726.     tst.l    d5
  727.     bpl.b    L150
  728. L149
  729.     moveq    #0,d5
  730.     bra.b    L154
  731. L150
  732.     cmp.l    #$FF,d5
  733.     ble.b    L152
  734. L151
  735.     move.l    #$FF,d5
  736. L152
  737. L153
  738. L154
  739.     lea    -$323E(a5),a1
  740.     move.b    d5,0(a1,d0.l*4)
  741. ;          rgba[i][GCOMP] = CLAMP( g, 0, 255 );
  742.     tst.l    d4
  743.     bpl.b    L156
  744. L155
  745.     moveq    #0,d4
  746.     bra.b    L160
  747. L156
  748.     cmp.l    #$FF,d4
  749.     ble.b    L158
  750. L157
  751.     move.l    #$FF,d4
  752. L158
  753. L159
  754. L160
  755.     lea    -$323E(a5),a1
  756.     lea    0(a1,d0.l*4),a1
  757.     move.b    d4,1(a1)
  758. ;          rgba[i][BCOMP] = CLAMP( b, 0, 255 );
  759.     tst.l    d3
  760.     bpl.b    L162
  761. L161
  762.     moveq    #0,d3
  763.     bra.b    L166
  764. L162
  765.     cmp.l    #$FF,d3
  766.     ble.b    L164
  767. L163
  768.     move.l    #$FF,d3
  769. L164
  770. L165
  771. L166
  772.     lea    -$323E(a5),a1
  773.     lea    0(a1,d0.l*4),a1
  774.     move.b    d3,2(a1)
  775. ;          rgba[i][ACOMP] = CLAMP( a, 0, 255 );
  776.     tst.l    d1
  777.     bpl.b    L168
  778. L167
  779.     moveq    #0,d1
  780.     bra.b    L172
  781. L168
  782.     cmp.l    #$FF,d1
  783.     ble.b    L170
  784. L169
  785.     move.l    #$FF,d1
  786. L170
  787. L171
  788. L172
  789.     lea    -$323E(a5),a1
  790.     lea    0(a1,d0.l*4),a1
  791.     move.b    d1,3(a1)
  792.     addq.l    #1,d0
  793. L173
  794.     cmp.l    d2,d0
  795.     blo    L148
  796. L174
  797. ;           if (ctx->Color.SWmasking) 
  798.     tst.b    $21E0(a2)
  799.     beq.b    L176
  800. L175
  801. ;          gl_mask_rgba_span( ctx, width, xpos, ypos, rgba );
  802.     pea    -$323E(a5)
  803.     move.l    d6,-(a7)
  804.     move.l    d7,-(a7)
  805.     move.l    d2,-(a7)
  806.     move.l    a2,-(a7)
  807.     jsr    _gl_mask_rgba_span
  808.     add.w    #$14,a7
  809. L176
  810. ;           (*ctx->Driver.WriteRGBASpan)( ctx, width, xpos, ypos
  811.     clr.l    -(a7)
  812.     pea    -$323E(a5)
  813.     move.l    d6,-(a7)
  814.     move.l    d7,-(a7)
  815.     move.l    d2,-(a7)
  816.     move.l    a2,-(a7)
  817.     move.l    $924(a2),a0
  818.     jsr    (a0)
  819.     add.w    #$18,a7
  820. ;           ypos++;
  821.     move.l    d6,d0
  822.     addq.l    #1,d0
  823.     move.l    d0,d6
  824.     addq.l    #1,-$325A(a5)
  825. L177
  826.     move.l    -$325A(a5),d0
  827.     cmp.l    -$10(a5),d0
  828.     blo    L147
  829. L178
  830. ;     
  831.     bra.b    L180
  832. L179
  833. ;     gl_error( ctx, GL_INVALID_ENUM, "glAccum" );
  834.     move.l    #L105,-(a7)
  835.     pea    $500.w
  836.     move.l    a2,-(a7)
  837.     jsr    _gl_error
  838.     add.w    #$C,a7
  839. L180
  840.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
  841.     movem.l    (a7)+,d2-d7/a2
  842.     unlk    a5
  843.     rts
  844.  
  845. L106
  846.     dc.b    'Calling glAccum() without an accumulation buffer',0
  847. L105
  848.     dc.b    'glAccum',0
  849.  
  850.     SECTION "_gl_clear_accum_buffer:0",CODE
  851.  
  852.  
  853. ;void gl_clear_accum_buffer( GLcontext *ctx )
  854.     XDEF    _gl_clear_accum_buffer
  855. _gl_clear_accum_buffer
  856. L205    EQU    -$40
  857.     link    a5,#L205
  858.     movem.l    d2-d7/a2,-(a7)
  859.     fmovem.x fp2,-(a7)
  860.     move.l    $8(a5),a2
  861. L183
  862. ;   if (ctx->Visual->AccumBits==0) 
  863.     move.l    $8F8(a2),a0
  864.     tst.l    $18(a0)
  865.     bne.b    L185
  866. L184
  867.     fmovem.x (a7)+,fp2
  868.     movem.l    (a7)+,d2-d7/a2
  869.     unlk    a5
  870.     rts
  871. L185
  872. ;   if (sizeof(GLaccum)==1) 
  873. ;   else if (sizeof(GLaccum)==2) 
  874. ;      acc_scale = 32767.0;
  875.     fmove.s    #$.46FFFE00,fp2
  876. ;   buffersize = ctx->Buffer->Width * ctx->Buffer->Height;
  877.     move.l    $8FC(a2),a0
  878.     move.l    4(a0),d2
  879.     move.l    $8FC(a2),a0
  880.     muls.l    $8(a0),d2
  881. ;   if (!ctx->Buffer->Accum) 
  882.     move.l    $8FC(a2),a0
  883.     tst.l    $14(a0)
  884.     bne.b    L187
  885. L186
  886. ;      ctx->Buffer->Accum = (GLaccum *)
  887.     move.l    d2,d0
  888.     moveq    #2,d1
  889.     asl.l    d1,d0
  890.     moveq    #1,d1
  891.     asl.l    d1,d0
  892.     move.l    d0,-(a7)
  893.     jsr    _malloc
  894.     addq.w    #4,a7
  895.     move.l    $8FC(a2),a0
  896.     move.l    d0,$14(a0)
  897. L187
  898. ;   if (ctx->Buffer->Accum) 
  899.     move.l    $8FC(a2),a0
  900.     tst.l    $14(a0)
  901.     beq    L204
  902. L188
  903. ;      if (ctx->Scissor.Enabled) 
  904.     move.l    a2,a0
  905.     add.l    #$DE92,a0
  906.     tst.b    (a0)
  907.     beq    L196
  908. L189
  909. ;     r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
  910.     fmove.s    $21B4(a2),fp0
  911.     fmul.x    fp2,fp0
  912.     fmove.l    fp0,d0
  913.     move.w    d0,d5
  914. ;     g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
  915.     lea    $21B4(a2),a0
  916.     fmove.s    4(a0),fp0
  917.     fmul.x    fp2,fp0
  918.     fmove.l    fp0,d0
  919.     move.w    d0,d4
  920. ;     b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
  921.     lea    $21B4(a2),a0
  922.     fmove.s    $8(a0),fp0
  923.     fmul.x    fp2,fp0
  924.     fmove.l    fp0,d0
  925.     move.w    d0,d3
  926. ;     a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
  927.     lea    $21B4(a2),a0
  928.     fmove.s    $C(a0),fp0
  929.     fmul.x    fp2,fp0
  930.     fmove.l    fp0,d0
  931.     move.w    d0,d2
  932. ;     width = 4 * (ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1);
  933.     move.l    $8FC(a2),a0
  934.     move.l    $28(a0),d0
  935.     move.l    $8FC(a2),a0
  936.     sub.l    $24(a0),d0
  937.     addq.l    #1,d0
  938.     move.l    d0,d1
  939.     moveq    #2,d0
  940.     asl.l    d0,d1
  941. ;     height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
  942.     move.l    $8FC(a2),a0
  943.     move.l    $30(a0),-$20(a5)
  944.     move.l    $8FC(a2),a0
  945.     move.l    -$20(a5),d0
  946.     sub.l    $2C(a0),d0
  947.     move.l    d0,-$20(a5)
  948.     addq.l    #1,-$20(a5)
  949. ;     row = ctx->Buffer->Accum
  950.     move.l    $8FC(a2),a0
  951.     move.l    $14(a0),a1
  952.     move.l    $8FC(a2),a0
  953.     move.l    $2C(a0),d0
  954.     move.l    $8FC(a2),a0
  955.     muls.l    4(a0),d0
  956.     move.l    $8FC(a2),a0
  957.     add.l    $24(a0),d0
  958.     moveq    #2,d6
  959.     asl.l    d6,d0
  960.     lea    0(a1,d0.l*2),a0
  961. ;     for (j=0;
  962.     moveq    #0,d7
  963.     bra.b    L194
  964. L190
  965. ;        for (i=0;
  966.     moveq    #0,d0
  967.     bra.b    L192
  968. L191
  969. ;           row[i+0] = r;
  970.     move.w    d5,0(a0,d0.l*2)
  971. ;           row[i+1] = g;
  972.     lea    2(a0),a1
  973.     move.w    d4,0(a1,d0.l*2)
  974. ;           row[i+2] = b;
  975.     lea    4(a0),a1
  976.     move.w    d3,0(a1,d0.l*2)
  977. ;           row[i+3] = a;
  978.     lea    6(a0),a1
  979.     move.w    d2,0(a1,d0.l*2)
  980.     addq.l    #4,d0
  981. L192
  982.     cmp.l    d1,d0
  983.     blt.b    L191
  984. L193
  985. ;        row += 4 * ctx->Buffer->Width;
  986.     move.l    $8FC(a2),a1
  987.     move.l    4(a1),d0
  988.     moveq    #2,d6
  989.     asl.l    d6,d0
  990.     moveq    #1,d6
  991.     asl.l    d6,d0
  992.     add.l    d0,a0
  993.     move.l    d7,d0
  994.     addq.l    #1,d0
  995.     move.l    d0,d7
  996. L194
  997.     move.l    d7,d0
  998.     cmp.l    -$20(a5),d0
  999.     blt.b    L190
  1000. L195
  1001.     bra    L204
  1002. L196
  1003. ;     if (ctx->Accum.ClearColor[0]==0.0 &&
  1004.     fmove.s    $21B4(a2),fp0
  1005.     ftst.d    fp0
  1006.     fbne.b    L201
  1007. L197
  1008.     lea    $21B4(a2),a0
  1009.     fmove.s    4(a0),fp0
  1010.     ftst.d    fp0
  1011.     fbne.b    L201
  1012. L198
  1013.     lea    $21B4(a2),a0
  1014.     fmove.s    $8(a0),fp0
  1015.     ftst.d    fp0
  1016.     fbne.b    L201
  1017. L199
  1018.     lea    $21B4(a2),a0
  1019.     fmove.s    $C(a0),fp0
  1020.     ftst.d    fp0
  1021.     fbne.b    L201
  1022. L200
  1023. ;Buffer->Accum, 0,
  1024.     moveq    #2,d0
  1025.     asl.l    d0,d2
  1026.     moveq    #1,d0
  1027.     asl.l    d0,d2
  1028.     move.l    d2,-(a7)
  1029.     clr.l    -(a7)
  1030.     move.l    $8FC(a2),a0
  1031.     move.l    $14(a0),-(a7)
  1032.     jsr    _q_memset
  1033.     add.w    #$C,a7
  1034.     bra.b    L204
  1035. L201
  1036. ;        acc = ctx->Buffer->Accum;
  1037.     move.l    $8FC(a2),a0
  1038.     move.l    $14(a0),a0
  1039. ;        r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
  1040.     fmove.s    $21B4(a2),fp0
  1041.     fmul.x    fp2,fp0
  1042.     fmove.l    fp0,d0
  1043.     move.w    d0,d5
  1044. ;        g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
  1045.     lea    $21B4(a2),a1
  1046.     fmove.s    4(a1),fp0
  1047.     fmul.x    fp2,fp0
  1048.     fmove.l    fp0,d0
  1049.     move.w    d0,d4
  1050. ;        b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
  1051.     lea    $21B4(a2),a1
  1052.     fmove.s    $8(a1),fp0
  1053.     fmul.x    fp2,fp0
  1054.     fmove.l    fp0,d0
  1055.     move.w    d0,d3
  1056. ;        a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
  1057.     lea    $21B4(a2),a1
  1058.     fmove.s    $C(a1),fp0
  1059.     fmul.x    fp2,fp0
  1060.     fmove.l    fp0,d0
  1061.     move.w    d0,d1
  1062. ;        for (i=0;
  1063.     moveq    #0,d0
  1064.     bra.b    L203
  1065. L202
  1066. ;           *acc++ = r;
  1067.     move.w    d5,(a0)+
  1068. ;           *acc++ = g;
  1069.     move.w    d4,(a0)+
  1070. ;           *acc++ = b;
  1071.     move.w    d3,(a0)+
  1072. ;           *acc++ = a;
  1073.     move.w    d1,(a0)+
  1074.     addq.l    #1,d0
  1075. L203
  1076.     cmp.l    d2,d0
  1077.     blo.b    L202
  1078. L204
  1079.     fmovem.x (a7)+,fp2
  1080.     movem.l    (a7)+,d2-d7/a2
  1081.     unlk    a5
  1082.     rts
  1083.  
  1084.     END
  1085.